#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
标签创建和推送工具

用法:
    python tag_and_push.py <标签名> <注释>

示例:
    python tag_and_push.py v1.0.5 "数据流跑通，修复了编辑和保存功能"
"""

import subprocess
import sys
import os

def create_and_push_tag(tag_name, tag_message):
    """
    创建一个Git标签并推送到远程仓库

    参数:
        tag_name (str): 标签名称
        tag_message (str): 标签注释

    返回:
        bool: 操作是否成功
    """
    try:
        # 检查标签是否已存在
        result = subprocess.run(['git', 'tag', '-l', tag_name],
                               capture_output=True, text=True, check=True)

        # 如果标签已存在，先删除它
        if tag_name in result.stdout:
            print(f"标签 {tag_name} 已存在，正在删除...")
            subprocess.run(['git', 'tag', '-d', tag_name], check=True)

            # 如果远程仓库也有这个标签，也需要删除
            try:
                subprocess.run(['git', 'push', 'origin', '--delete', tag_name], check=True)
                print(f"已从远程仓库删除标签 {tag_name}")
            except subprocess.CalledProcessError:
                print(f"远程仓库中不存在标签 {tag_name} 或删除失败")

        # 创建新标签
        print(f"正在创建标签 {tag_name}...")
        subprocess.run(['git', 'tag', '-a', tag_name, '-m', tag_message], check=True)

        # 推送标签到远程仓库
        print(f"正在推送标签 {tag_name} 到远程仓库...")
        subprocess.run(['git', 'push', 'origin', tag_name], check=True)

        print(f"标签 {tag_name} 已成功创建并推送到远程仓库")
        return True

    except subprocess.CalledProcessError as e:
        print(f"错误: {e}")
        print(f"命令输出: {e.stdout}")
        print(f"命令错误: {e.stderr}")
        return False

    except Exception as e:
        print(f"发生未知错误: {e}")
        return False

def main():
    """主函数"""
    # 检查参数数量
    if len(sys.argv) < 3:
        print(__doc__)
        sys.exit(1)

    # 获取参数
    tag_name = sys.argv[1]
    tag_message = sys.argv[2]

    # 创建并推送标签
    success = create_and_push_tag(tag_name, tag_message)

    # 根据操作结果设置退出码
    sys.exit(0 if success else 1)

if __name__ == "__main__":
    main()